package com.valveinspectionsys.util;

import java.text.DecimalFormat;

import android.content.Context;

import com.baidu.location.BDLocation;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;

/**
 * 通过百度定位系统得到径维度
 * 
 * @author king
 * 
 */
public class BaiDuGpsUtil {

    public LocationClient client;

    public BDLocation location;

    public String Latitude;

    public String Longitude;

    public String getLatitude() {
	return Latitude;
    }

    public void setLatitude(String latitude) {
	Latitude = latitude;
    }

    public String getLongitude() {
	return Longitude;
    }

    public void setLongitude(String longitude) {
	Longitude = longitude;
    }

    public BaiDuGpsUtil(Context context) {

	client = new LocationClient(context);

    }

    /**
     * 创建定位管理LocationClientOption，并设置定位参数，
     * 
     * @return
     */
    public static LocationClientOption getLocationClientOption(String type) {
	LocationClientOption option = new LocationClientOption();
	// 打开GPS
	option.setOpenGps(true);
	// 设置坐标类型
	option.setCoorType("bd09ll");

	// 设置网络优先
	if (type.equals("gps")) {
	    option.setPriority(LocationClientOption.GpsFirst);
	} else if (type.equals("network")) {
	    option.setPriority(LocationClientOption.NetWorkFirst);
	}

	// 设置产品线名称
	option.setProdName("waterSys");

	// 设置定位定时时间
	if (type.equals("gps")) {
	    option.setScanSpan(10000);
	} else {
	    option.setScanSpan(5000);
	}
	// 是否启用缓存定位
	option.disableCache(true);

	return option;

    }

    /**
     * 得到径维度
     * 
     * @return
     */
    public void getLoDoubles(BDLocation location) {
	System.out.println("得到径维度");
	if (location != null) {
	    this.Latitude = location.getLatitude() + "";
	    this.Longitude = location.getLongitude() + "";
	}

    }

    /**
     * 打开百度API
     */
    public void start() {
	if (client != null && !client.isStarted()) {
	    client.start();
	}
    }

    /**
     * 关闭百度API
     */
    public void stop() {
	if (client != null && client.isStarted()) {
	    client.stop();
	}
    }

    static double DEF_PI = 3.14159265359; // PI
    static double DEF_2PI = 6.28318530712; // 2*PI
    static double DEF_PI180 = 0.01745329252; // PI/180.0
    static double DEF_R = 6370693.5; // radius of earth

    /**
     * 通过百度地图上两点算出距离
     * 
     * @param lon1
     * @param lat1
     * @param lon2
     * @param lat2
     * @return
     */
    public static double GetShortDistance(double lon1, double lat1, double lon2, double lat2) {
	double ew1, ns1, ew2, ns2;
	double dx, dy, dew;
	double distance = 0;
	// 角度转换为弧度
	ew1 = lon1 * DEF_PI180;
	ns1 = lat1 * DEF_PI180;
	ew2 = lon2 * DEF_PI180;
	ns2 = lat2 * DEF_PI180;
	// 经度差
	dew = ew1 - ew2;
	// 若跨东经和西经180 度，进行调整
	if (dew > DEF_PI)
	    dew = DEF_2PI - dew;
	else if (dew < -DEF_PI)
	    dew = DEF_2PI + dew;
	dx = DEF_R * Math.cos(ns1) * dew; // 东西方向长度(在纬度圈上的投影长度)
	dy = DEF_R * (ns1 - ns2); // 南北方向长度(在经度圈上的投影长度)
	// 勾股定理求斜边长
	distance = Math.sqrt(dx * dx + dy * dy);

	return formatToSix(distance);
    }

    /**
     * 保留两位小数
     * 
     * @param result
     * @return
     */
    public static Double formatToSix(Double result) {
	DecimalFormat df6 = new DecimalFormat("#.00");// 保留2位有效数字
	return Double.parseDouble(df6.format(result));
    }

}
